独習PHP:第7章 標準クラスライブラリ
独習PHP:第7章 標準クラスライブラリ
オブジェクト指向
プログラムで扱う対象をオブジェクト(もの)に見立てる
オブジェクトを中心にコードを組み立てていく手法のこと
クラスはオブジェクトの別名としてよく使われる
データを操作するための機能を持った器のようなもの
実際にはクラスとオブジェクトは異なる。
クラス: 設計図
オブジェクト: クラスをもとに作られた実際のモノ
code:php
// クラスをもとにコピーを作ることをインスタンス化する、という $sampleがオブジェクト(インスタンス)
$sample = new Animal('bird', ...);
::演算子
クラスメソッドを呼び出すときの演算子。
(クラスプロパティ, 静的メソッド, 静的プロパティと色々呼び方がある)
code:php
$clazz = 'MyClass';
print $clazz::hogehoge(); // print MyClass::hogehoge(); と同じ意味
$cls = new $clazz(); // $cls = new MyClass(); と同じ意味
PHPの標準クラスについて
DateTimeクラス
Unixタイムスタンプ
日付/時刻値を1970/1/1 00:00:00からの経過秒数で表した値
DirectoryIteratorクラス
指定されたフォルダ配下のファイル情報にアクセスできる
code:php
<?php
$dir = new DirectoryIterator('./');
foreach ($dir as $file) {
if ($file->isFile()) {
echo $file->getFileName() . ' ' . $file->getSize() . '<br>';
}
}
?>
// class_no_memo.txt 25
// index.php 670 という表示が出てくれる
new DirectoryIterator(...)でフォルダを開くという操作をしている
指定したパスにアクセスできなかった場合、例外処理(9章参照)を吐く
外部ライブラリを使おう
Composerについて
PHPは標準でたくさんの関数やクラスライブラリが用意されている
しかしながら、PHP本家以外の開発者が拡張ライブラリを提供している
Composerは拡張ライブラリをインストールするためのパッケージ管理ツールのこと
通常のパッケージ(ライブラリ)追加の手順
動作に必要な.phpファイルをかき集める
適切なファイルに配置する
動作確認
Composerがあると
インストール / アンインストールがコマンド1つで実行できる
動作するために必要となるパッケージも持ってきてくれる(依存性の解決)
定義ファイルとしてまとめておけば、複数環境で同一の環境を準備できる
これはcomposerの特徴というより、パッケージ管理ツール全般の特徴と言える
アプリ単位にパッケージを管理する
composerの前、PEARというツールがあった
PEARは全てのパッケージをプラットフォーム共通で管理
composerはアプリごとにパッケージ管理をしてくれる
ライブラリの自動ローディング機能を使える
クラスの自動ロードに対応
クラスライブラリを個別インポートせずとも、必要なら自動で有効化できる
インポート忘れを防げる
対応ライブラリが豊富
Dockerコンテナにcomposerを入れる
サイトから落とす
Install Composer In Your Project
Run this in your command line:
Or download composer.phar into your project root.
See the Composer documentation for complete installation instructions on various platforms.
code:php
All settings correct for using Composer
Downloading...
Composer (version 2.4.4) successfully installed to: /var/www/html/composer.phar
Use it: php composer.phar
composer.pharがインストールできた。
.pharってなんだ
複数のファイルを1つにまとめたもの、というような理解でよさそう
composer.pharはcomposerの本体そのもの
Use itに書いている通り、こんな感じで使える
code:txt
root@6f3d063aec67:/var/www/html# php composer.phar -v
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 2.4.4 2022-10-27 14:39:29
composerコマンドだけで使えるように、パスを通す
パスの通ってるファイルに移動させる
code:txt
// 例としてphpをみてみる
root@6f3d063aec67:/var/www/html# which php
/usr/local/bin/php
// composerも同じ場所に置く
root@6f3d063aec67:/var/www/html# mv composer.phar /usr/local/bin/
root@6f3d063aec67:/var/www/html# composer.phar
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 2.4.4 2022-10-27 14:39:29
// こっちでもできる
root@6f3d063aec67:/var/www/html# composer.phar --version
Composer version 2.4.4 2022-10-27 14:39:29
できるようになった
composer -vとかじゃないのは、verが違ってコマンドも変わったからかな?
実際にライブラリを落としてみよう
code:terminal
composer.phar require guzzlehttp/guzzle "~7.3.0"
// エラーが出た
Package operations: 7 installs, 0 updates, 0 removals
Failed to download psr/http-message from dist: The zip extension and unzip/7z commands are both missing, skipping.
Your command-line PHP is using multiple ini files. Run php --ini to show them.
Now trying to download from source
In GitDownloader.php line 82:
git was not found in your PATH, skipping source download
ググった
zipコマンド/unzipコマンドがないよー
もしくはgitコマンドがないよー
ということなので入れてやる
apt-get install -y unzip
再度やってみる
composer.phar require guzzlehttp/guzzle "~7.3.0"
いけたかも?
code:txt
// 資金募集中ですので詳細はcomposer fundしてね
3 packages you are using are looking for funding.
Use the composer fund command to find out more!
// セキュリティの脆弱性があったよ
Found 5 security vulnerability advisories affecting 1 package.
個人使用なら気にする必要ないだろう、OK
composer.jsonって何?
パッケージ定義ファイル
現在のアプリで使ってるライブラリ情報が記載されている
gemfileと似てる
こっちのファイルにライブラリ情報を書いて、composer updateをかけるとinsしてくれる
別の環境でもcomposer.jsonを配置しておけば同じライブラリをインストールしてくれる
conposer install
composer.lockって何?
composer.jsonと似たように、ライブラリ情報が列記されている
json側は開発者が編集しても良いが、lockファイルは基本的に操作しない
code:txt
# json側
"ezyang/htmlpurifier": "*"
# lock側
"packages": [
{
"name": "ezyang/htmlpurifier",
"version": "v4.16.0", // 実際に入ってるデータの情報が記載されている
...
composer install
lockがある場合はその情報に基づいてインストール、ない場合はjsonをみてインストール
composer update
json記述を優先する。*の表記があれば、その時点の最新版をインストールする
インストールするライブラリのバージョンを完全に再現する場合は、どちらのファイルも揃える考慮が必要
Guzzleライブラリを使ってみよう
スクレイピング
サイト上ページから情報を抽出するための技術
競合の商品のスペックや値段などを抽出して自社製品と比較したりとか。
マッシュアップ
ネットワーク上で提供されているサービスを組み合わせ、自作のアプリに組み込む技術のこと
AmazonのAPIを使って、自分のwebアプリに膨大な商品情報を表示できたり
Guzzleはこの2つの技術をサポートするライブラリ
code:php
// 指定されたアドレスにアクセスし、取得したファイルをテキスト表示する
<?php
require '../vendor/autoload.php';
$cli = new GuzzleHttp\Client([
]);
$res = $cli->request('get', '/tmp/sample.txt');
print $res->getBody();
// サイト内容が出力される!
?>
手順1:autoload.phpのインポート
これはライブラリを自動ロードするためのコード
guzzleに限らず、composerでインストールしたライブラリを利用するときはインポートする
手順2: GuzzleHttp\Clientオブジェクトの生成
HTTP通信のリクエストとレスポンスを管理してくれる
ちなみにこの\は名前空間の区切り(10章参照)
手順3: リクエストの送信
Clientクラスのrequestメソッドがやってくれてる
HTTP POST通信もできる
code:php
$res2 = $cli->post('/tmp/post.php', [
'form_params' => [
'name' => '佐々木太郎',
]
]);
jsonデータを取得する
そもそも、json
JavaScript Object Notation
HTTP経由でデータを受渡する場合によく使われる形式
jsのオブジェクトリテラルを元にしたデータ形式だからこういう名前がついている
jsと親和性が高い。
code:php
$cli = new GuzzleHttp\Client([
]);
$res = $cli->get('get');
$obj = json_decode($res->getBody());
print_r($obj);
// ちゃんと返ってくる
// 1つの要素だけ取りたい場合